﻿// JavaScript Document
//非空验证
function v_required(element) {
    var value = element.val();
    if (value == "" || value.replace(/(^\s*)|(\s*$)/g, "").length < 1) {
        v_show(element, "对不起,该项不能为空!");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//提示信息
function v_show(element, param) {
    if (element.next().is("span")) {
        if (param == "") {
            param = "√";
        }
        element.next().text(param);
    }
};
function v_nickname(element) {
    return v_regexp(element, new RegExp("^[\u4e00-\u9fa5a-zA-Z0-9_]+$"), "输入含有非法字符");
};
function v_chinese(element) {
    return v_regexp(element, new RegExp("^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$"), "请输入中文名");
};
//Email验证
function v_email(element) {
    return v_regexp(element, new RegExp("^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$"), "请输入一个有效的email");
};
//数字验证
function v_number(element) {
    return v_regexp(element, new RegExp("^([+-]?)\\d*\\.?\\d+$"), "请输入一个有效的数字");
};
//最大值
function v_max(element, param) {
    if (!v_number(element)) {
        return false;
    }
    var value = element.val();
    if (value > param) {
        v_show(element, "输入的值必须小于等于" + param + "");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//最小值
function v_min(element, param) {
    if (!v_number(element)) {
        return false;
    }
    var value = element.val();
    if (value < param) {
        v_show(element, "输入的值必须大于等于" + param + "");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//区间
function v_range(element, param) {
    if (!v_number(element)) {
        return false;
    }
    var value = element.val();
    if (value < param[0] || value > param[1]) {
        v_show(element, "输入的值必须在" + param[0] + " 和 " + param[1] + "之间");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//最大长度
function v_maxLength(element, param) {
    if (!v_required(element)) {
        return false;
    }
    var value = element.val().length;
    if (value > param) {
        v_show(element, "输入的字符长度必须小于等于" + param + "");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//最小长度
function v_minLength(element, param) {
    if (!v_required(element)) {
        return false;
    }
    var value = element.val().length;
    if (value < param) {
        v_show(element, "输入的字符长度必须大于等于" + param + "");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//长度区间
function v_rangeLength(element, param) {
    if (!v_required(element)) {
        return false;
    }
    var value = element.val().length;
    if (value < param[0] || value > param[1]) {
        v_show(element, "输入的字符长度必须在" + param[0] + " 和 " + param[1] + "之间");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//匹配
function v_equalTo(element, pwdID) {
    if (!v_required(element)) {
        return false;
    }
    var value = element.val();
    if (value != $("#" + pwdID).val()) {
        v_show(element, "您两次输入的密码不一致");
        return false;
    } else {
        v_show(element, "");
        return true;
    }
};
//身份证
var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" };
function isCardID(sId) {
    var iSum = 0;
    var info = "";
    if (!/^\d{17}(\d|x)$/i.test(sId)) return "您输入的身份证长度或格式错误";
    sId = sId.replace(/x$/i, "a");
    if (aCity[parseInt(sId.substr(0, 2))] == null) return "您的身份证地区非法";
    sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
    var d = new Date(sBirthday.replace(/-/g, "/"));
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return "身份证上的出生日期非法";
    for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
    if (iSum % 11 != 1) return "您输入的身份证号非法";
    return true; //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女") 
};
function v_idCard(element) {
    if (!v_required(element)) {
        return false;
    }
    var value = element.val();
    if (/^[1-9]([0-9]{14}|[0-9]{17})$/.test(value)) {
        var msg = isCardID(value);
        if (msg != true) {
            v_show(element, msg);
            return false;
        }
        v_show(element, "");
        return true;
    } else {
        v_show(element, "您输入的身份证号非法!");
        return false;
    }
};
//qq
function v_qq(element) {
    return v_regexp(element, new RegExp("[1-9][0-9]{4,}"), "您输入的qq号码有误");
};
//图片
function v_image(element) {
    return v_regexp(element, new RegExp("(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$"), "您选择的不是图片");
};
//邮编
function v_zipcode(element) {
    return v_regexp(element, new RegExp("^\\d{6}$"), "您输入的邮编有误");
};
//正整数
function v_positiveInteger(element) {
    return v_regexp(element, new RegExp("^[1-9]\\d*$"), "请输入正整数");
};
//自然数
function v_nn(element) {
    return v_regexp(element, new RegExp("^[0-9]\\d*$"), "请输入自然数");
};
//手机
function v_mobile(element) {
    return v_regexp(element, new RegExp("^(13|15|18)[0-9]{9}$"), "您输入是手机号码有误");
};
//校验登录名:只能输入5-16个以字母开头、可带数字、“_”的字符
function v_userName(element) {
    return v_regexp(element, new RegExp("^[a-zA-Z]{1}([a-zA-Z0-9]|[_]){4,15}$"), "登录名只能输入5-16个以字母开头、可带数字、“_”的字符 ");
};
//密码:密码必须在6到18个字符之间
function v_password(element) {
    return v_regexp(element, new RegExp("^.{6,18}$"), "密码必须在6到18个字符之间");
};
function v_myLoginName(element) {
    return v_regexp(element, new RegExp("^[a-zA-Z]{1}([a-zA-Z0-9]|[_]){4,15}$|^(13|15|18)[0-9]{9}$|^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$"), "请输入有效的用户名/邮箱/手机");
};
//通过正则表达式验证
function v_regexp(element, regexp, msg) {
    if (!v_required(element)) {//非空验证
        return false;
    }
    var value = element.val();
    if (value.match(regexp)) {
        v_show(element, ""); //通过清空提示信息
        return true;
    } else {
        v_show(element, msg); //不通过则提示信息
        return false;
    }
};
//匹配动态值(密码):blur_check方法失效,用下面的方法代替
//$("#txtRepwd").blur(function(){
//        v_equalTo($("#txtRepwd"),$("#txtPwd").val());
//        });

//失去焦点时验证方法
function blur_check(id, c, value) {
    $("#" + id).blur(function () {
        my_check(id, c, value);
    });
};
//另外一种验证方式,参数:id、验证名、[value(特殊验证需要)]
function my_check(id, c, value) {
    var $obj = $("#" + id);
    if ($obj.length>0) {
        if (c == 'v_required') {
            return v_required($obj);
        } else if (c == 'v_email') {
            return v_email($obj);
        } else if (c == 'v_userName') {
            return v_userName($obj);
        } else if (c == 'v_password') {
            return v_password($obj);
        } else if (c == 'v_equalTo') {
            return v_equalTo($obj, value);
        } else if (c == 'v_nickname') {
            return v_nickname($obj);
        } else if (c == 'v_number') {
            return v_number($obj);
        } else if (c == 'v_idCard') {
            return v_idCard($obj);
        } else if (c == 'v_qq') {
            return v_qq($obj);
        } else if (c == 'v_image') {
            return v_image($obj);
        } else if (c == 'v_zipcode') {
            return v_zipcode($obj);
        } else if (c == 'v_positiveInteger') {
            return v_positiveInteger($obj);
        } else if (c == 'v_mobile') {
            return v_mobile($obj);
        } else if (c == 'v_max') {
            return v_max($obj, value);
        } else if (c == 'v_min') {
            return v_min($obj, value);
        } else if (c == 'v_range') {
            return v_range($obj, value);
        } else if (c == 'v_maxLength') {
            return v_maxLength($obj, value);
        } else if (c == 'v_minLength') {
            return v_minLength($obj, value);
        } else if (c == 'v_rangeLength') {
            return v_rangeLength($obj, value);
        } else if (c == 'v_nn') {
            return v_nn($obj);
        } else if (c == 'v_myLoginName') {
            return v_myLoginName($obj);
        }else {
            alert('sorry,找不到这种验证!返回false;');
            return false;
        }
    } else {
        alert(id + ",未找到此ID的对象");
        return false;
    }
};
//v_required非空v_email邮件v_userName用户名v_password密码v_equalTo匹配v_nickname昵称
//v_number数字v_idCard身份证v_qq扣扣v_image图片v_zipcode邮编v_positiveInteger正整数
//v_mobile手机v_max最大值v_min最小值v_range区间v_maxLength最大长度v_minLength最小长度
//v_rangeLength长度区间v_nn自然数v_myLoginName(邮件/用户名/手机三种用户名)